/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Filtrado;

import Fachada.persistenciaFachada;
import Interface.iPersistenciaREI;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
import nivelNegocio.NegociosException;
import nivelPersistencia.PersistenciaException;
import objetosNegocio.Arrendador;

/**
 *
 * @author Christian
 */
public class FilterManager {

    private FabricaFiltro fabrica;
    private iPersistenciaREI rei;

    public FilterManager() {
        fabrica = new FabricaFiltro();
        rei = new persistenciaFachada();
    }

    public int verificarArrendador(Arrendador arrendador, int operacion) throws NegociosException {
        List<Class> filtros = fabrica.fabricaObjeto(operacion);
        Arrendador ar = arrendador;
        if (operacion == 2) {
            try {
                rei.turnOn();
                ar = rei.getArrendador(arrendador);
                rei.turnOff();
            } catch (PersistenciaException ex) {
                throw new NegociosException("Error al obtener el Arrendador en el Manejador de Filtros");
            }
        }
        boolean b = false;
        if (operacion > 0 && operacion < 3) {
            try {
                if (filtros != null) {
                    for (int i = 0; i < filtros.size(); i++) {
                        System.out.println(filtros.size());
                        Class clase = filtros.get(i);
                        Object c = clase.newInstance();
                        b = (boolean) clase.getMethods()[0].invoke(c, new Object[]{ar});
                        //System.out.println(b);
                    }
                }
            } catch (InstantiationException msg) {
                msg.printStackTrace();
            } catch (IllegalAccessException msg) {
                msg.printStackTrace();
            } catch (InvocationTargetException msg) {
                msg.printStackTrace();
            }
        }
        try {
            if (b) {
                if (operacion == 1) {
                    rei.turnOn();
                    int i = rei.addArrendador(arrendador);
                    rei.turnOff();
                    return i;
                } else if (operacion == 2) {
                    rei.turnOn();
                    rei.deleteArrendador(arrendador);
                    rei.turnOff();
                }
            } 
            if (operacion == 3) {
                rei.turnOn();
                rei.updateArrendador(arrendador);
                rei.turnOff();
            }
        } catch (PersistenciaException ex) {
            throw new NegociosException("Error al ejecutar la operacion en el Manejador de Filtros.");
        }

        return -1;
    }
}
